The subject technology generally relates to flash storage systems, and more particularly to recovering data in a flash storage system.
Flash storage systems have become the preferred technology for many applications in recent years. The ability to store large amounts of data and to withstand harsh operating environments, together with the non-volatile nature of the storage, makes these flash storage devices appealing for many applications.
A typical flash storage system includes a number of flash storage devices and a controller. The controller writes data into storage blocks of the flash storage device and reads data from these storage blocks. Additionally, the controller performs error detection and correction of corrupt data stored in the storage blocks. For example, the controller may use an error correction code to recover data originally stored in a storage block. The data stored in a storage block is sometimes corrupt because of a physical failure of the storage block containing the data. In many flash storage systems, the controller identifies corrupt data stored in a failed storage block, recovers the data originally written into the failed storage block, and writes the recovered data into a spare storage block in the flash storage device. Although this technique has been successfully used to recover corrupt data in a failed storage block, the number of spare storage blocks in a flash storage device may become exhausted. Thus, this technique is limited by the number of spare storage blocks in the flash storage device. Moreover, the flash storage device may itself experience a physical failure which prevents the controller from recovering data in the failed flash storage device.
In light of the above, a need exists for an improved system and method of recovering data in a flash storage system. A further need exists for recovering data in a failed flash storage device of a flash storage system.